package service

import (
	"AiBus/global"
	"AiBus/model"
	"AiBus/request"
	"AiBus/utils"
	"encoding/json"
	"github.com/gin-gonic/gin"
	"reflect"
)

func Completions(c *gin.Context, req request.ArgumentsReq, UserID string) {
	var arguments request.ArgumentsResp
	user := model.User{}
	err := global.App.DB.Where("open_id=?", UserID).First(&user).Error
	if err != nil {
		utils.Fail(c, 402, "用户信息错误")

	} else if user.IsVIP != 1 {
		utils.Fail(c, 402, "你还不是VIP用户，暂时无法使用该功能！！！")
		return
	}
	var content string
	for _, item := range req.Message {
		content = item.Content
	}
	get, err := utils.HGetAll(UserID, content) // 判断对应的hash是否存在
	if err != nil {
		//	redis中没有数据，新增缓存数据
		result := utils.Arguments(req)
		// 直接将api请求的数据以字符串的形式存入redis中
		err = utils.SetHash(UserID, content, string(result)) // 将数据存入redis中，作为缓存数据使用
		if err != nil {
			utils.Fail(c, 403, "缓存数据存储失败")
			return
		}
		// 存储缓存成功后，直接返回请求结果给前端用户
		_ = json.Unmarshal(result, &arguments) // 将字符串数据转为json格式返回
		utils.Success(c, 0, arguments)
	} else {
		var tmp string // 临时变量
		for _, itme := range get {
			of := reflect.TypeOf(itme)
			switch of.Name() {
			case "string":
				s := reflect.ValueOf(itme).String()
				tmp = s
			}
		}
		_ = json.Unmarshal([]byte(tmp), &arguments)
		utils.Success(c, 0, arguments)

	}
}
